<?php
include_once("../dao/conexao_class.php");
include_once("../model/tipo_ocorrencia_model_class.php");
include_once("../controller/urgencia_controller_class.php");
include_once("../controller/especialidade_controller_class.php");

class TipoOcorrenciaDAO{
    
    private $insert = "INSERT INTO tipo_ocorrencia(tip_oco_descricao,urg_id,esp_id) VALUES (?,?,?)";
    private $update = "UPDATE tipo_ocorrencia SET tip_oco_descricao = ?, urg_id = ?, esp_id = ? WHERE tip_oco_id = ?";
    private $delete = "DELETE FROM tipo_ocorrencia WHERE tip_oco_id = ?";
    private $select = "SELECT * FROM tipo_ocorrencia";
    private $select_by_descricao = "SELECT * FROM tipo_ocorrencia WHERE tipo_oco_descricao = ?";
    private $select_by_especialidade = "SELECT * FROM tipo_ocorrencia WHERE esp_id = ?";
    private $select_by_id = "SELECT * FROM tipo_ocorrencia WHERE tip_oco_id = ?";
    
    function insert($objOcorrencia){
        //conectando ao banco
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        
        if ($stm = $conn->prepare($this->insert)) {

            $stm->bind_param("sii", $objOcorrencia->getDescricao(), $objOcorrencia->getUrgencia(), 
                    $objOcorrencia->getEspecialidade());
            
            if ($stm->execute()) {
                
                $conn->close();
                return true;
            } else {
                mysqli_error($conn);
                $conn->close();
                return false;
            }
        } else {
            mysqli_error($conn);
            return false;
        }
    }
    
    function update($objOcorrencia){
        //conectando ao banco
        
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        
        if ($stm = $conn->prepare($this->update)) {

            $stm->bind_param("siii", $objOcorrencia->getDescricao(), $objOcorrencia->getUrgencia(), 
                    $objOcorrencia->getEspecialidade(), $objOcorrencia->getId());
            
            if ($stm->execute()) {
                
                $conn->close();
                return true;
            } else {
                
                mysqli_error($conn);
                $conn->close();
                return false;
            }
        } else {
            mysqli_error($conn);
            return false;
        }
    }
    
    function delete($id){
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        
        if ($stm = $conn->prepare($this->delete)) {

            $stm->bind_param("i", $id);

            if ($stm->execute()) {
                $conn->close();
                return true;
            } else {
                $conn->close();
                return false;
            }
        }
        return false;
    }
    
    function findAllTipoOcorrencias(){
        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->select)) {

            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $descricao, $urgencia, $especialidade);

            //para cada resultado encontrado
            $objUrgencia = new UrgenciaController();
            $objEspec = new EspecialidadeController();
            $i = 0;
            $lista = array();
            while ($stm->fetch()) {
//                echo "Id: ".$id." Descrição: ".$descricao."<br>";
                $objTipoOco = new TipoOcorrenciaModel();
                
                $objTipoOco->setId($id);
                $objTipoOco->setDescricao($descricao);
                
                $urgM = $objUrgencia->selecionarPorId($urgencia);
                
                $objTipoOco->setUrgencia($urgM);
                
                $espec = $objEspec->selecionar($especialidade);
                
                $objTipoOco->setEspecialidade($espec);
                
                $lista[] = $objTipoOco;
            }

            $conn->close();
            return $lista;
        }
    }
    
    
    function findByEspecialidade($id){
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $objTipoOco = new TipoOcorrenciaModel();
        $lista = array();
        if ($stm = $conn->prepare($this->select_by_especialidade)) {
            
            $stm->bind_param('i', $id);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $descricao, $urgencia, $especialidade);

            //para cada resultado encontrado
            $objUrgencia = new UrgenciaController();
            $objEspec = new EspecialidadeController();
            $i = 0;
            
            while ($stm->fetch()) {
//                echo "Id: ".$id." Descrição: ".$descricao."<br>";
                $objTipoOco = new TipoOcorrenciaModel();
                
                $objTipoOco->setId($id);
                $objTipoOco->setDescricao($descricao);
                
                $urgM = $objUrgencia->selecionarPorId($urgencia);
                
                $objTipoOco->setUrgencia($urgM);
                
                $espec = $objEspec->selecionar($especialidade);
                
                $objTipoOco->setEspecialidade($espec);
                
                $lista[$i++] = $objTipoOco;
            }

        }
        $conn->close();
        return $lista;
    }
    
    function findById($id){
        $objConn = new Conexao();
        $conn = $objConn->conecta();
        $objTipoOco = new TipoOcorrenciaModel();
        if ($stm = $conn->prepare($this->select_by_id)) {
            
            $stm->bind_param('i', $id);
            
            $stm->execute();

            //atribui o resultado encontrado as variaveis
            $stm->bind_result($id, $descricao, $urgencia, $especialidade);

            //para cada resultado encontrado
            $objUrgencia = new UrgenciaController();
            $objEspec = new EspecialidadeController();
            
            while ($stm->fetch()) {
//                echo "Id: ".$id." Descrição: ".$descricao."<br>";
                $objTipoOco = new TipoOcorrenciaModel();
                
                $objTipoOco->setId($id);
                $objTipoOco->setDescricao($descricao);
                
                $urgM = $objUrgencia->selecionarPorId($urgencia);
                
                $objTipoOco->setUrgencia($urgM);
                
                $espec = $objEspec->selecionar($especialidade);
                
                $objTipoOco->setEspecialidade($espec);
                
                return $objTipoOco;
            }

            $conn->close();
            return $objTipoOco;
        }
    }
    
    function existe($descricao){
        $objConn = new Conexao();
        $conn = $objConn->conecta();

        if ($stm = $conn->prepare($this->select_by_descricao)) {
            
            $stm->bind_param('s', $descricao);
            
            $stm->execute();
            
            while ($stm->fetch()) {
                
                return true;
            }
            $conn->close();
            return false;
        }
        return false;
    }
}

